package com.note.feng.leetcode.algorithms.easy.three;

import java.util.HashMap;
import java.util.Map;

public class ThreeHundredEightySeven {

    /**
     * 387 字符串中第一个唯一字符
     * 给定一个字符串 s ，找到 它的第一个不重复的字符，并返回它的索引 。如果不存在，则返回 -1 。
     *
     * 示例 1：
     *
     * 输入: s = "leetcode"
     * 输出: 0
     * 示例 2:
     *
     * 输入: s = "loveleetcode"
     * 输出: 2
     * 示例 3:
     *
     * 输入: s = "aabb"
     * 输出: -1
     *
     * 提示:
     *
     * 1 <= s.length <= 105
     * s 只包含小写字母
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode.cn/problems/first-unique-character-in-a-string
     */
    /**
     * 解法：哈希映射，统计出现次数，再遍历，次数==1，返回下标即可
     * @param s
     * @return
     */
    public int firstUniqChar(String s) {
        int len = s.length();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            map.put(c, map.getOrDefault(c, 0) + 1);
        }
        for (int i = 0; i < len; i++) {
            char c = s.charAt(i);
            if(map.get(c) == 1){
                return i;
            }
        }
        return -1;
    }
}
